Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
Over Uitwisselprofiel Zorgkantoren Inkoopondersteuning en beleidsontwikkeling
- Publicatiedatum:
- 03-10-2025
- Inwerkingtreding:
- 03-10-2025
18.1 Wat is de balans o.b.v. Grootboek?
Concepten
Relaties
Eigenschappen
SPARQL query
Code gekopieerd
...Kopieer naar klembord
1# Indicator: Zorgkantoren 18.1.0 2# Parameters: ?peildatum 3# Ontologie: versie 3.0.0 of nieuwer 4 5PREFIX onz-fin: <http://purl.org/ozo/onz-fin#> 6prefix onz-zorg: <http://purl.org/ozo/onz-zorg#> 7PREFIX onz-g: <http://purl.org/ozo/onz-g#> 8PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 9 10SELECT 11 ?jaarrekeningpost 12 (SUM(?bedrag_rubriek) AS ?bedrag) 13WHERE 14{ 15 # BIND("2024-12-31" AS ?peildatum) 16 BIND(?peildatum AS ?peildatum_argument) 17 { 18 { 19 SELECT # totaal per rubriek 20 (SUM(?geld_bedrag) + SUM(?saldo_waarde)/count(?saldo_waarde) AS ?bedrag_rubriek) ?rubriek ?categorie 21 WHERE { 22 { 23 SELECT # bereken het meest recente saldo per rubriek, 0 indien geen saldo 24 ?rubriek ?categorie 25 (IF(BOUND(?saldo_bedrag), ?saldo_bedrag, 0) AS ?saldo_waarde) 26 ?peildatum_argument 27 (IF(BOUND(?saldo_datum), ?saldo_datum, ?unbound) AS ?begin_datum) 28 ?saldo_datum ?saldo 29 WHERE { 30 # BIND("2024-12-31"^^xsd:date AS ?peildatum) 31 BIND(?peildatum as ?peildatum_argument) 32 # Dynamically identify rubrieken and assign categories 33 # This assumes ?rubriek instances are findable as subjects/objects in the graph 34 # and their IRIs start with onz-fin: followed by a 6-digit code. 35 # For performance, we select ?rubriek instances based on their specific type. 36 { 37 SELECT DISTINCT ?rubriek WHERE { 38 ?rubriek a onz-fin:Grootboekrubriek . 39 40 # These filters can be kept as a safeguard, but the type-based selection 41 # is doing the primary work of finding the correct rubrieken. 42 FILTER(STRSTARTS(STR(?rubriek), STR(onz-fin:))) 43 FILTER(REGEX(STRAFTER(STR(?rubriek), STR(onz-fin:)), "^[0-9]{6}$")) 44 } 45 } 46 # Re-BIND rubriekCode here as it's outside the subquery's scope for BIND 47 BIND(STRAFTER(STR(?rubriek), STR(onz-fin:)) AS ?rubriekCode) 48 49 # Assign category based on the ?rubriekCode pattern 50 BIND( 51 COALESCE( 52 # Rubrieken A.I t/m A.III 53 IF(STRSTARTS(?rubriekCode, "00"), "A.I", ?unbound), 54 IF(STRSTARTS(?rubriekCode, "01"), "A.II", ?unbound), 55 IF(STRSTARTS(?rubriekCode, "03"), "A.III", ?unbound), 56 57 # Rubrieken B.I t/m B.IV 58 IF(STRSTARTS(?rubriekCode, "3"), "B.I", ?unbound), 59 IF(STRSTARTS(?rubriekCode, "12"), "B.II", ?unbound), 60 IF(STRSTARTS(?rubriekCode, "131"), "B.III", ?unbound), 61 IF(STRSTARTS(?rubriekCode, "132"), "B.IV", ?unbound), 62 63 # Rubrieken D.I t/m D.VIII (D.II en D.III bestaan niet in prismant, altijd 0) 64 IF(STRSTARTS(?rubriekCode, "0511"), "D.I", ?unbound), 65 IF(STRSTARTS(?rubriekCode, "05413"), "D.IV", ?unbound), 66 IF(STRSTARTS(?rubriekCode, "05311") || STRSTARTS(?rubriekCode, "05342") || STRSTARTS(?rubriekCode, "05423"), "D.V", ?unbound), 67 IF(STRSTARTS(?rubriekCode, "05323"), "D.VI", ?unbound), 68 IF(STRSTARTS(?rubriekCode, "0539") || STRSTARTS(?rubriekCode, "05493") || STRSTARTS(?rubriekCode, "05915"), "D.VII", ?unbound), 69 IF(STRSTARTS(?rubriekCode, "091"), "D.VIII", ?unbound), 70 71 # Rubriek E 72 IF(STRSTARTS(?rubriekCode, "06"), "E", ?unbound), 73 74 # Rubriek F 75 IF(STRSTARTS(?rubriekCode, "07"), "F", ?unbound), 76 77 # Rubriek G 78 IF(STRSTARTS(?rubriekCode, "14") || STRSTARTS(?rubriekCode, "15"), "G", ?unbound), 79 "other" 80 ) AS ?categorie 81 ) 82 # Only process rubrieken that fall into one of the defined categories 83 FILTER(BOUND(?categorie)) 84 85 OPTIONAL { 86 ?rubriek onz-g:isAbout ?saldo . 87 ?saldo 88 a onz-fin:EindSaldo ; 89 onz-fin:heeftGeldBedrag ?saldo_bedrag ; 90 onz-g:hasDate ?saldo_datum . 91 FILTER (?saldo_datum <= ?peildatum_argument) 92 } 93 FILTER NOT EXISTS { 94 ?rubriek onz-g:isAbout ?saldo2 . 95 ?saldo2 96 onz-g:hasDate ?saldo_datum2 ; 97 a onz-fin:EindSaldo ;. 98 FILTER(?saldo2 != ?saldo) 99 FILTER (?saldo_datum2 <= ?peildatum_argument && ?saldo_datum2 > ?saldo_datum) 100 } 101 } # End of innermost WHERE 102 } # End of innermost SELECT block 103 OPTIONAL { # sommige rubrieken hebben misschien geen post 104 ?grootboek_post 105 a onz-fin:Grootboekpost ; 106 onz-g:partOf ?rubriek ; 107 onz-g:hasDate ?datum ; 108 onz-fin:heeftGeldBedrag ?geld_bedrag_temp . 109 FILTER (?datum <= ?peildatum_argument && (?datum > ?begin_datum || !BOUND(?begin_datum))) 110 } 111 BIND(IF(BOUND(?geld_bedrag_temp), ?geld_bedrag_temp, 0) AS ?geld_bedrag) 112 113 } GROUP BY ?rubriek ?categorie 114 } # End of middle SELECT block 115 116 VALUES (?categorie ?jaarrekeningpost_child){ 117 ("A.I" "A.I Immateriële vaste activa") 118 ("A.II" "A.II Materiële vaste activa") 119 ("A.III" "A.III Financiële vaste activa") 120 ("B.I" "B.I Voorraden") 121 ("B.II" "B.II Vorderingen") 122 ("B.III" "B.III Effecten") 123 ("B.IV" "B.IV Liquide middelen") 124 ("D.I" "D.I Gestort en opgevraagd kapitaal") 125 ("D.IV" "D.IV Wettelijke en statutaire reserve") 126 ("D.V" "D.V Bestemmingsreserve") 127 ("D.VI" "D.VI Bestemmingsfonds") 128 ("D.VII" "D.VII Overige reserves") 129 ("D.VIII" "D.VIII Onverdeelde winst") 130 ("E" "E Voorzieningen") 131 ("F" "F Langlopende schulden") 132 ("G" "G Kortlopende schulden") 133 } 134 135 # Determine the parent-level post (A, B, D...) based on the first letter 136 BIND( 137 IF(STRSTARTS(?categorie, "A."), "A Vaste activa", 138 IF(STRSTARTS(?categorie, "B."), "B Vlottende activa", 139 IF(STRSTARTS(?categorie, "D."), "D Eigen vermogen", 140 ?unbound))) AS ?jrp_parent # Fallback naar ?unbound om dubbeltelling te voorkomen 141 ) 142 143 BIND( 144 IF(STRSTARTS(?categorie, "A.") || STRSTARTS(?categorie, "B."), "C Totaal activa", 145 IF(STRSTARTS(?categorie, "D.") || ?categorie = "E" || ?categorie = "F" || ?categorie = "G", "H Totaal passiva", 146 ?unbound)) AS ?combi 147 ) 148 149 VALUES ?x {1 2 3} 150 BIND( 151 IF(?x = 1, ?jaarrekeningpost_child, 152 IF(?x = 2, ?jrp_parent, 153 IF(?x = 3, ?combi, 154 ?unbound))) AS ?jaarrekeningpost 155 ) 156 157 FILTER(BOUND(?jaarrekeningpost)) 158 159 } 160 UNION 161 { 162 # ======================================================================= 163 # Volledige lijst van alle jaarrekeningposten (bedrag 0 als fallback) 164 # ======================================================================= 165 BIND(0 AS ?bedrag_rubriek) 166 VALUES (?jaarrekeningpost_child ?jrp_parent ?combi) { 167 # A: Vaste activa 168 ("A.I Immateriële vaste activa" "A Vaste activa" "C Totaal activa") 169 ("A.II Materiële vaste activa" "A Vaste activa" "C Totaal activa") 170 ("A.III Financiële vaste activa" "A Vaste activa" "C Totaal activa") 171 172 # B: Vlottende activa 173 ("B.I Voorraden" "B Vlottende activa" "C Totaal activa") 174 ("B.II Vorderingen" "B Vlottende activa" "C Totaal activa") 175 ("B.III Effecten" "B Vlottende activa" "C Totaal activa") 176 ("B.IV Liquide middelen" "B Vlottende activa" "C Totaal activa") 177 178 # D: Eigen vermogen 179 ("D.I Gestort en opgevraagd kapitaal" "D Eigen vermogen" "H Totaal passiva") 180 ("D.II Agio" "D Eigen vermogen" "H Totaal passiva") 181 ("D.III Herwaarderingsreserve" "D Eigen vermogen" "H Totaal passiva") 182 ("D.IV Wettelijke en statutaire reserve" "D Eigen vermogen" "H Totaal passiva") 183 ("D.V Bestemmingsreserve" "D Eigen vermogen" "H Totaal passiva") 184 ("D.VI Bestemmingsfonds" "D Eigen vermogen" "H Totaal passiva") 185 ("D.VII Overige reserves" "D Eigen vermogen" "H Totaal passiva") 186 ("D.VIII Onverdeelde winst" "D Eigen vermogen" "H Totaal passiva") 187 188 # E, F, G: Overige passiva 189 ("E Voorzieningen" "E Voorzieningen" "H Totaal passiva") 190 ("F Langlopende schulden" "F Langlopende schulden" "H Totaal passiva") 191 ("G Kortlopende schulden" "G Kortlopende schulden" "H Totaal passiva") 192 } 193 194 VALUES ?post_type { 1 2 3 } # 1=child, 2=parent, 3=combi 195 BIND( 196 IF(?post_type = 1, ?jaarrekeningpost_child, 197 IF(?post_type = 2, ?jrp_parent, 198 IF(?post_type = 3, ?combi, ?unbound))) AS ?jaarrekeningpost 199 ) 200 FILTER(BOUND(?jaarrekeningpost)) 201 } 202} GROUP BY ?jaarrekeningpost 203ORDER BY ?jaarrekeningpost